package cn.itcast.mq.config;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FanoutConfig {





    // itcast.fanout---叫做交换机的名称--下面这个代码就是表示把交换机给声明好了---这个这个是fanout：广播，就是 广播模式。
    @Bean
    public FanoutExchange fanoutExchange(){
        return new FanoutExchange("itcast.fanout");
    }





    //import org.springframework.amqp.core.Queue;注意这个包别引用错了
    // fanout.queue1---叫做定义了，队列1的名称--然后就是队列1需要绑定要交换机1上。
    //这个bean的名称就是唯一的id
    @Bean
    public Queue fanoutQueue1(){
        return new Queue("fanout.queue1");
    }





    // 绑定队列1到交换机---注意再绑定交换机的时候，fanoutQueue1和fanoutExchange不能写错
    @Bean
    public Binding fanoutBinding1(Queue fanoutQueue1, FanoutExchange fanoutExchange){
        return BindingBuilder.bind(fanoutQueue1).to(fanoutExchange);
    }









    //这是再消费端进行的编写
    //注意交换机之后指定一个，因为是通过同一个交换机然后分发到各个队列中了。所以交换机只有一个，队列需要多个。
    // fanout.queue2
    @Bean
    public Queue fanoutQueue2(){
        return new Queue("fanout.queue2");
    }

    // 绑定队列2到交换机
    @Bean
    public Binding fanoutBinding2(Queue fanoutQueue2, FanoutExchange fanoutExchange){
        return BindingBuilder
                .bind(fanoutQueue2)
                .to(fanoutExchange);
    }




















    @Bean
    public Queue objectQueue(){
        return new Queue("object.queue");
    }
}
